After the introduction of implicit grabs in Clutter, a release
event will now always be delivered to the actor that received
the corresponding press event.
This results in surprising behavior when moving the pointer
while pressed, as a button release will always activate the
original item, even when the pointer moved to a different item
or outside the menu altogether.
Address this by checking the hover state (that is, whether
the item contains the pointer actor) before activating it.
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6606
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2740>
return Clutter.EVENT_PROPAGATE;
this.remove_style_pseudo_class('active');
+
+ // Pointer left the item during the grab
+ if (!this.hover)
+ return Clutter.EVENT_PROPAGATE;
+
this.activate(Clutter.get_current_event());
return Clutter.EVENT_STOP;
}